package com.kanshu.ksgb.fastread.doudou.common.business.utils;

import android.content.Context;
import android.text.TextUtils;
import android.util.Log;

import com.kanshu.ksgb.fastread.doudou.R;
import com.kanshu.ksgb.fastread.doudou.app.constants.Constants;
import com.kanshu.ksgb.fastread.doudou.common.business.utils.UserUtils;
import com.kanshu.ksgb.fastread.doudou.common.util.StorageUtils;
import com.kanshu.ksgb.fastread.doudou.common.util.Utils;

import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;

/**
 * Created by wcy on 2017\6\28 0028.
 */

public class PushUtils {

    /**
     * 校验Tag Alias 只能是数字,英文字母和中文
     * @param s
     * @return
     */
    public static boolean isValidTagAndAlias(String s) {
        Pattern p = Pattern.compile("^[\u4E00-\u9FA50-9a-zA-Z_]{0,}$");
        Matcher m = p.matcher(s);
        return m.matches();
    }

    /**
     * 设置极光alias和tag. 极光别名和标签规则: "" （空字符串）表示取消之前的设置。 每次调用设置有效的别名，覆盖之前的设置。
     * 有效的别名组成：字母（区分大小写）、数字、下划线、汉字。 限制：alias 命名长度限制为 40 字节。（判断长度需采用UTF-8编码）
     */
    public static void setAliasTags(Context context, TagAliasCallback callback) {
        String userid = UserUtils.getUserId();
        String band = Utils.getMachine();
        if (!isValidTagAndAlias(band)) {
            band = band.replace(" ", "_");
            band = band.replace("-", "_");
        }
        // 设置别名
        if (isValidTagAndAlias(userid)) {
            JPushInterface.setAlias(context, userid, callback);
        }
        // 检查标签设置
        Set<String> tags = new java.util.HashSet<String>();
        // 极光vip推送code(目前是写死的)
        String appversion = context.getResources().getString(R.string.jpush_vip_push_code);
        if (isValidTagAndAlias(appversion)) {
            tags.add(appversion);
        }
        // 机型
        if (isValidTagAndAlias(band)) {
            tags.add(band);
        }
        // 性别
        String sex = StorageUtils.getPreference(context, Constants.SP_NAME, Constants.USER_SEX, Constants.TYPE_MALE);
        sex = "sex_" + sex;
        if (isValidTagAndAlias(sex)) {
            tags.add(sex);
        }
        // vip走通知通道
        tags.add("android_notify_version");
        JPushInterface.setTags(context, tags, callback);
    }

    public static void setAliasTags(Context context) {
        setAliasTags(context, simple);
    }

    public static TagAliasCallback simple = new TagAliasCallback() {
        @Override
        public void gotResult(int code, String alias, Set set) {
            if (code == 0) {
                if (!TextUtils.isEmpty(alias)) {
                    Log.d("wcy", "set alias success:" + alias);
                }
                if (set != null && set.size() > 0) {
                    Log.d("wcy", "set tags success:" + set.toString());
                }
            } else {
                Log.d("wcy", "fail code:" + code);
                //setAliasTags(Xutils.getContext(), simple);
            }
        }

    };

}
